﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RepositorioSATT;
using DominioSATT;

namespace ServiceSATT
{
    public class InscripcionService : IInscripcionService
    {

        #region Miembros de IInscripcionService

        public int Agregar(IInterfazInscripcion ui)
        {
            IInscripcionRepositorio Repositorio = new InscripcionRepositorio();
            IPersonaRepositorio PersonaRepo = new PersonaRepositorio();
            Persona nPer = PersonaRepo.Obtener(ui.Dni);
            IEventoRepositorio EventoRepo = new EventoRepositorio();
            int IdEvento = EventoRepo.ObtenerId(ui.EventoInscripcion);
            ITorneoRepositorio TorneoRepo = new TorneoRepositorio();
            if (nPer.Sexo == ui.Torneo[2])
            {
                Torneo bTorneo = TorneoRepo.Obtener(IdEvento, ui.Torneo[0], ui.Torneo[1], ui.Torneo[2]);
                Inscripcion nInscripcion = null;
                if (ui.NroInscripcion == 0)
                    nInscripcion = new Inscripcion(nPer, bTorneo, ui.Fecha, 0, ui.Estado);
                else
                    nInscripcion = new Inscripcion(ui.NroInscripcion, nPer, bTorneo, ui.Fecha, 0, ui.Estado);
                return Repositorio.Agregar(nInscripcion);
            }
            else
                throw new ServicioExeption("El Sexo del Afiliado no concuerda con el del Torneo.");
        }

        public void DatosInscripcion(ui.ICuponInscripcion ui)
        {
            IInscripcionRepositorio repo = new InscripcionRepositorio();
            ui.Datos = repo.DatosInscripcion(ui.NroInscripcion);
        }


        #endregion

        #region IInscripcionService Members


        public void Listar(IListadoInscripciones ui)
        {
            ITorneoRepositorio TorneoRep = new TorneoRepositorio();
            EventoRepositorio EventoRep = new EventoRepositorio();
            IInscripcionRepositorio InscRep = new InscripcionRepositorio();
            string[] Torneo = ui.Torneo.Split(',');
            string Categoria = Torneo[0].Trim();
            string Tipo = Torneo[1].Trim();
            string Sexo = Torneo[2].Trim();
            int IdEvento = EventoRep.ObtenerId(ui.Evento);
            Torneo NuevoTorneo = TorneoRep.Obtener(IdEvento, Categoria, Tipo, Sexo);
            List <Inscripcion> ListaInscriptos= InscRep.Listar(NuevoTorneo.Id);
            string[][] Lista = new string[ListaInscriptos.Count][];
            int i = 0;
            foreach (Inscripcion inscripciones in ListaInscriptos)
            {
                Lista[i] = new string[] { inscripciones.NroInscripcion.ToString(),inscripciones.Fecha.ToString(),inscripciones.Inscripto.Apellido+" "+inscripciones.Inscripto.Nombre,inscripciones.Estado.ToString()};
                i++;
            }
            ui.ListaInscripciones = Lista;
        }

        public int ObtenerTipo(int NroInscripcion)
        {
            IInscripcionRepositorio InscRepo = new InscripcionRepositorio();
            List<Inscripcion> Lista =InscRepo.Buscar(NroInscripcion);
            return Lista.Count;
        }

        public void CambiarEstado(int NroInscripcion, bool Estado)
        {
            IInscripcionRepositorio InscRepo = new InscripcionRepositorio();
            List<Inscripcion>Lista = InscRepo.Buscar(NroInscripcion);
            InscRepo.ModificarEstado(Lista[0], Estado);
        }

        public string ObtenerNombreInscripto(int NroInscripcion)
        {
            IInscripcionRepositorio InscRepo = new InscripcionRepositorio();
            List<Inscripcion> Lista = InscRepo.Buscar(NroInscripcion);
            string Temp = "";
            foreach (Inscripcion Insc in Lista)
            {
                Temp += Insc.Inscripto.Apellido + " ";
            }
            return Temp;
        }
        #endregion
    }
}
